<html>
<head>
 
</head>
<body style="text-align=center;font-size:32px;">
<table align="center">
<tr><td><div id="problemNum" style='background-color:#999999;width:800;text-align:center;font-size:32px;'></div></td></tr>
<tr><td><div id="problemContent" style='word-wrap:break-word;background-color:#bbbbbb;width:800;text-align:left;font-size:20px;'></div></td></tr>
<tr><td><div id="result" style='word-wrap:break-word; color:#ffff22;font-size:48;background-color:#8855ff;width:800;text-align:center;'></div></td></tr>
<tr><td><div id="copyleft" style='word-wrap:break-word; color:#ffff22;font-size:18;background-color:#666666;width:800;text-align:right;'></div></td></tr>
<script language="javascript">
    //---------------------------------//
    // Project Euler 
    //
    // Author:thrombin
    //   Date:2015-12-11
    //---------------------------------//  
var p_order=11;//Problem Order
 
var problem='In the 20×20 grid below, four numbers along a diagonal line have been marked in red.\
08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08\
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00\
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65\
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91\
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80\
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50\
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70\
67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21\
24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72\
21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95\
78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92\
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57\
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58\
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40\
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66\
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69\
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36\
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16\
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54\
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48\
The product of these numbers is 26 × 63 × 78 × 14 = 1788696.\
What is the greatest product of four adjacent numbers in the same direction (up, down, left, right, or diagonally) in the 20×20 grid?';
 
//solve the problem
//==============编程思路简介================
//  将数组扩充为26x26，扩充的位置全部填0
//  通过对中间的20x20部分每一个数都计算上、下、左、右，斜 5个乘积的最大值
//=====================================
var num_str='08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 \
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 \
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 \
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91 \
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80 \
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50 \
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70 \
67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21 \
24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72 \
21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95 \
78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92 \
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57 \
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58 \
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40 \
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66 \
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69 \
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36 \
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16 \
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54 \
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48';
var max=0;
//根据字符串，生成待评估数字数组
var num_str_array= num_str.split(" ");
var nums=new Array(26);
var i,j;
 
//初始化扩充数组
for(i=0;i<26;i++){
    nums[i]=new Array(26);
    for(var j=0;j<26;j++){
        nums[i][j]=0;
    }
}
 
//将原始20x20数组填充进扩充数组
for(i=0;i<20;i++){
    for(j=0;j<20;j++){
        nums[i+3][j+3]=parseInt(num_str_array[i*20+j]);
    }
}
 
//逐个搜索上、下、左、右、+1、-1斜线6个方向的相邻乘积
//找到最大值
for(var i=3;i<23;i++){
    for(var j=3;j<23;j++){
        left    =nums[i][j-3]*nums[i][j-2]*nums[i][j-1]*nums[i][j];         if(left>max){max=left;mi=i;mj=j;mflag='left';}
        right   =nums[i][j+3]*nums[i][j+2]*nums[i][j+1]*nums[i][j];     if(right>max){max=right;mi=i;mj=j;mflag='right';}
        up      =nums[i-3][j]*nums[i-2][j]*nums[i-1][j]*nums[i][j];         if(up>max){max=up;mi=i;mj=j;mflag='up';}
        down    =nums[i+3][j]*nums[i+2][j]*nums[i+1][j]*nums[i][j];         if(down>max){max=down;mi=i;mj=j;mflag='down';}
        diag1   =nums[i+3][j+3]*nums[i+2][j+2]*nums[i+1][j+1]*nums[i][j];   if(diag1>max){max=diag1;mi=i;mj=j;mflag='diag1';}
        diag2   =nums[i-3][j+3]*nums[i-2][j+2]*nums[i-1][j+1]*nums[i][j];   if(diag2>max){max=diag2;mi=i;mj=j;mflag='diag2';}
    }
}
 
//update browser
document.getElementById("problemNum").innerHTML="Project Euler-Problem "+p_order;
document.getElementById("problemContent").innerHTML=problem;
document.getElementById("result").innerHTML="Answer:"+max+":"+mi+","+mj+"@"+mflag;
document.getElementById("copyleft").innerHTML="CopyLeft@Thrombin    2015";
</script>
</body>
</html>